package xyz.lwm.lazycat.web.route;

import xyz.lwm.lazycat.web.handle.Handler;
import xyz.lwm.lazycat.web.handle.HandlerType;

/**
 * <h3>路由</h3>
 *
 * <pre>
 * 内置路由:
 * 1. 实现 {@link xyz.lwm.lazycat.web.Controllable} 接口, 使用 {@link Router} 方法添加路由
 * </pre>
 *
 * <pre>
 * 通用路由有两种方式整合:
 * 1. 实现 {@link Route} 接口, 并在容器中注册, 由当前方法统一添加路由;
 * 2. 实现 {@link xyz.lwm.lazycat.web.Controllable} 接口, 在 {@link xyz.lwm.lazycat.web.Controllable#control(Router)} 中手动添加 route 对象 , 并在容器中注册;
 * </pre>
 *
 * @see xyz.lwm.lazycat.web.WebConfiguration#generalRoutesControllable(java.util.List)
 * @author lwm
 */
public interface Route {

    /**
     * 路由类型
     */
    HandlerType getType();

    /**
     * 路由路径
     */
    String getPath();

    /**
     * 处理器
     */
    Handler getHandler();

    /**
     * 路径匹配
     *
     * @param path 路径
     * @return 是否匹配
     */
    boolean matches(String path);

}
